package com.powerbank.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 计费规则实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("billing_rule")
public class BillingRule {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 规则名称
     */
    @TableField("rule_name")
    private String ruleName;

    /**
     * 规则类型：1-标准计费，2-节假日计费，3-活动计费
     */
    @TableField("rule_type")
    private Integer ruleType;

    /**
     * 基础时长（分钟）
     */
    @TableField("base_duration")
    private Integer baseDuration;

    /**
     * 基础费用
     */
    @TableField("base_fee")
    private BigDecimal baseFee;

    /**
     * 超时计费单位（分钟）
     */
    @TableField("overtime_unit")
    private Integer overtimeUnit;

    /**
     * 超时单价
     */
    @TableField("overtime_fee")
    private BigDecimal overtimeFee;

    /**
     * 单日最高费用
     */
    @TableField("max_daily_fee")
    private BigDecimal maxDailyFee;

    /**
     * 免费时长（分钟）
     */
    @TableField("free_duration")
    private Integer freeDuration;

    /**
     * 押金金额
     */
    @TableField("deposit_amount")
    private BigDecimal depositAmount;

    /**
     * 生效开始时间
     */
    @TableField("effective_start_time")
    private LocalDateTime effectiveStartTime;

    /**
     * 生效结束时间
     */
    @TableField("effective_end_time")
    private LocalDateTime effectiveEndTime;

    /**
     * 状态：0-禁用，1-启用
     */
    @TableField("status")
    private Integer status;

    /**
     * 优先级（数值越大优先级越高）
     */
    @TableField("priority")
    private Integer priority;

    /**
     * 规则描述
     */
    @TableField("description")
    private String description;

    /**
     * 创建时间
     */
    @TableField(value = "created_time", fill = FieldFill.INSERT)
    private LocalDateTime createdTime;

    /**
     * 更新时间
     */
    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;
}